package com.allen.study.application.api.assembler;

import com.allen.study.application.api.assembler.mapper.IEmployeeInfoDTOStructMapper;
import com.allen.study.application.api.request.EmployeeInfoCreateRequest;
import com.allen.study.application.api.request.EmployeeInfoQueryRequest;
import com.allen.study.application.api.request.EmployeeInfoUpdateRequest;
import com.allen.study.application.api.response.EmployeeInfoQueryResponse;
import com.allen.study.application.api.response.EmployeeInfoResponse;
import com.allen.study.domain.entity.EmployeeInfo;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 类型转换器
 *
 * @author AllenSun
 * @since 2025-02-26 22:43
 */
@Component
public class EmployeeInfoDTOAssembler {

    /**
     * 创建请求数据传输对象 转 实体
     *
     * @param createRequest 创建请求数据传输对象
     * @return 实体
     */
    public EmployeeInfo assembler(EmployeeInfoCreateRequest createRequest) {
        //领域模型 自行实现 entity组装工厂类 (domian层提供)
        return IEmployeeInfoDTOStructMapper.INSTANCE.fromCreateRequest(createRequest);
    }

    /**
     * 更新请求数据传输对象 转 实体
     *
     * @param updateRequest 更新请求数据传输对象
     * @return 实体
     */
    public EmployeeInfo assembler(EmployeeInfoUpdateRequest updateRequest) {
        //领域模型 自行实现 entity组装工厂类 (domian层提供)
        return IEmployeeInfoDTOStructMapper.INSTANCE.fromUpdateRequest(updateRequest);
    }

    /**
     * 查询请求数据传输对象 转 实体
     *
     * @param queryRequest 查询请求数据传输对象
     * @return 实体
     */
    public EmployeeInfo assembler(EmployeeInfoQueryRequest queryRequest) {
        //领域模型 自行实现 entity组装工厂类 (domian层提供)
        return IEmployeeInfoDTOStructMapper.INSTANCE.fromQueryRequest(queryRequest);
    }

    /**
     * 实体 转 响应数据传输对象
     *
     * @param employeeInfo 实体
     * @return 响应数据传输对象
     */
    public EmployeeInfoResponse toResponse(EmployeeInfo employeeInfo) {
        return IEmployeeInfoDTOStructMapper.INSTANCE.toResponse(employeeInfo);
    }

    /**
     * 实体 转 查询响应数据传输对象
     *
     * @param employeeInfo 实体
     * @return 查询响应数据传输对象
     */
    public EmployeeInfoQueryResponse toQueryResponse(EmployeeInfo employeeInfo) {
        return IEmployeeInfoDTOStructMapper.INSTANCE.toQueryResponse(employeeInfo);
    }

    /**
     * 实体列表 转 查询响应数据传输对象列表
     *
     * @param employeeInfoList 实体列表
     * @return 查询响应数据传输对象列表
     */
    public List<EmployeeInfoQueryResponse> toQueryResponse(List<EmployeeInfo> employeeInfoList) {
        return IEmployeeInfoDTOStructMapper.INSTANCE.toQueryResponse(employeeInfoList);
    }
}
